var RECRUIT_API_KEY = 'f6aee6dbf3823d61';
var map;
var price_map = {};
var REGION_MAP = {
  'Europe': { // area.code = 'EUR'
    center: '53.330873,24.257813',
    countries: { //'IS':'', //アイスランド
      //'IE':'', //アイルランド
      //'AZ':'', //アゼルバイジャン
      //'AE':'', //アラブ首長国連邦
      //'AL':'', //アルバニア
      //'AM':'', //アルメニア
      'GB': '55.3780510,-3.4359730', //イギリス
      'IL':'31.046051,34.851612', //イスラエル
      'IT': '41.871940,12.567380', //イタリア
      'UA':'48.379433,31.16558', //ウクライナ
      'EG':'26.820553,30.802498', //エジプト
      'EE':'58.595272,25.013607', //エストニア
      'AT':'47.516231,14.550072', //オーストリア
      'NL': '52.1326330,5.291265999999999', //オランダ
      //'CY':'', //キプロス
      'GR': '39.0742080,21.8243120', //ギリシア
      //'GL':'', //グリーンランド（デンマーク）
      //'GE':'', //グルジア
      //'HR':'', //クロアチア
      //'SM':'', //サンマリノ共和国
      //'CH':'', //スイス
      //'SE':'', //スウェーデン
      'ES': '40.46366700000001,-3.749220', //スペイン
      //'SK':'', //スロバキア
      //'SI':'', //スロベニア
      //'YU':'', //セルビア
      'CZ': '49.81749199999999,15.4729620', //チェコ
      //'TN':'', //チュニジア
      //'DK':'', //デンマーク
      'DE': ' 51.1656910,10.4515260', //ドイツ
      'TR': '38.9637450,35.2433220', //トルコ
      //'NO':'', //ノルウェー
      //'HU':'', //ハンガリー
      'FI': '66.84868510,42.13975290', //フィンランド
      'FR': '46.2276380,2.2137490', //フランス
      //'BG':'', //ブルガリア
      //'BY':'', //ベラルーシ
      //'BE':'', //ベルギー
      //'PL':'', //ポーランド
      //'BA':'', //ボスニア・ヘルツェゴビナ
      'PT': '39.39987199999999,-8.2244540', //ポルトガル
      //'MK':'', //マケドニア
      //'MT':'', //マルタ共和国
      //'MC':'', //モナコ公国
      //'MD':'', //モルドバ
      //'MA':'', //モロッコ
      //'04':'', //モンテネグロ
      //'JO':'', //ヨルダン
      //'LV':'', //ラトビア
      //'LT':'', //リトアニア
      //'RO':'', //ルーマニア
      //'LU':'', //ルクセンブルク大公国
      //'LB':'', //レバノン
      'RU':'61.52401,105.318756' //ロシア
    }
  },
  'Africa': {
    center: '6.83917,24.433594',
    countries: {
      'DZ':'28.033886,1.659626', //アルジェリア
      'IR':'32.427908,53.688046', //イラン
      'UG':'1.373333,32.290275', //ウガンダ
      'ET':'9.145,40.489673', //エチオピア
      'OM':'21.512583,55.923255', //オマーン
      'GH':'7.946527,-1.023194', //ガーナ
      'QA':'25.354826,51.183884', //カタール
      'KW':'29.31166,47.481766', //クウェート
      'KE': '0.428463,37.875366', // ケニア
      'SA':'23.885942,45.079162', //サウジアラビア
      'ZM':'-13.133897,27.849332', //ザンビア
      //'DJ':'', //ジブチ
      //'ZW':'', //ジンバブエ
      //'SD':'', //スーダン
      //'SZ':'', //スワジランド王国
      //'SN':'', //セネガル
      //'TZ':'', //タンザニア
      //'TG':'', //トーゴ
      //'NG':'', //ナイジェリア
      //'NA':'', //ナミビア共和国
      //'BH':'', //バーレーン
      //'03':'', //パレスチナ自治区
      //'BF':'', //ブルキナファソ
      //'BI':'', //ブルンジ
      //'BJ':'', //ベナン
      //'BW':'', //ボツワナ
      //'MG':'', //マダガスカル
      //'MW':'', //マラウイ
      //'ML':'', //マリ
      //'MZ':'', //モザンビーク
      //'RW':'', //ルワンダ
      //'LS':'', //レソト
      'ZA':'-30.559482,22.937506' //南アフリカ共和国
    }
  },
  'Asia': { // area.code = 'AAS'
    center: '38.272689,91.933594',
    countries: {
      'IN': '19.062118,75.849609', //インド
      //'ID':'', //インドネシア
      //'UZ':'', //ウズベキスタン
      //'KZ':'', //カザフスタン
      //'KH':'', //カンボジア
      //'KG':'', //キルギス
      //'SG':'', //シンガポール
      //'LK':'', //スリランカ
      'TH': '34.161818,103.271484', //タイ
      //'TM':'', //トルクメニスタン
      //'NP':'', //ネパール
      //'PK':'', //パキスタン
      //'BD':'', //バングラデシュ
      //'BT':'', //ブータン
      //'PH':'', //フィリピン
      //'BN':'', //ブルネイ
      'VN': '13.667338,108.369141', //ベトナム
      //'MO':'', //マカオ
      //'MY':'', //マレーシア
      //'MM':'', //ミャンマー
      //'MN':'', //モンゴル
      //'LA':'', //ラオス
      'CN': '34.161818,103.271484', //中国
      'TW':'23.69781,120.960515', //台湾
      'KR': '36.633162,128.012695', //韓国
      'HK': '22.257326,114.197388' //香港
    }
  },
  'Australia': {
    center: '-24.686952,135',
    countries: {
      'AU': '-25.799891,136.054688',
      'NZ': '-40.900557,174.885971',
      'PG': '-6.314993,143.95555'
    }
  },
  'North America': { // area.code = 'DUS'
    center: '51.727028,-104.589844',
    countries: {
      'US': '40.313043,-100.019531', //アメリカ合衆国
      'CA': '56.130366,-106.346771', // カナダ
      'MX':'23.634501,-102.552784' //メキシコ
    }
  },
  'South America': { // area.code = 'DUS'
    center: '-19.311143,-59.0625',
    countries: {
      'AR':'-38.416097,-63.616672', //アルゼンチン
      'UY':'-32.522779,-55.765835', //ウルグアイ
      'EC':'-1.831239,-78.183406', //エクアドル
      'SV':'13.794185,-88.89653', //エルサルバドル
      'GY':'4.860416,-58.93018', //ガイアナ
      'CU':'21.521757,-77.781167', //キューバ
      //'GT':'', //グアテマラ
      //'GD':'', //グレナダ
      //'KY':'', //ケイマン諸島
      //'CR':'', //コスタリカ
      'CO':'4.570868,-74.297333', //コロンビア
      'JM':'18.109581,-77.297508', //ジャマイカ
      //'02':'', //セント・マーチン
      //'LC':'', //セント・ルシア
      //'KN':'', //セントクリストファーネーヴィス
      //'VC':'', //セントビンセント
      'CL':'-35.675147,-71.542969', //チリ
      //'DO':'', //ドミニカ共和国
      //'DM':'', //ドミニカ国
      //'TT':'', //トリニダード・トバゴ
      //'NI':'', //ニカラグア
      //'PA':'', //パナマ
      //'BS':'', //バハマ
      //'PY':'', //パラグアイ
      //'BB':'', //バルバドス
      //'PR':'', //プエルトリコ
      'BR': '-8.407168,-54.755859', //ブラジル
      //'VE':'', //ベネズエラ
      //'BZ':'', //ベリーズ
      //'PE':'', //ペルー
      //'BO':'', //ボリビア
      'HN':'15.199999,-86.241905' //ホンジュラス
    }
  }
};

$(function() {
  var BING_API_KEY = 'Agj3docoxBO1Ry7fCgQRAeNfagXtF2d4BjPTz00HVErg0e1irSZXjn-oKka98e-t';

  // マップを作成
  map = new Microsoft.Maps.Map(document.getElementById('map'), {
    credentials: BING_API_KEY
  });

  // 拡大率が変わったら表示する内容を変えます。
  Microsoft.Maps.Events.addHandler(map, 'viewchangeend', function() {
    var zoom = map.getZoom();
    if (zoom < 3) {
      showRegionPrice();
    } else {
      showCountryPrice();
    }
  });
  loadPrice();
  function is_mobile () {
	  var useragents = [
	    'iPhone',         // Apple iPhone
	    'iPod',           // Apple iPod touch
	    'Android',        // 1.5+ Android
	    'dream',          // Pre 1.5 Android
	    'CUPCAKE',        // 1.5+ Android
	    'blackberry9500', // Storm
	    'blackberry9530', // Storm
	    'blackberry9520', // Storm v2
	    'blackberry9550', // Storm v2
	    'blackberry9800', // Torch
	    'webOS',          // Palm Pre Experimental
	    'incognito',      // Other iPhone browser
	    'webmate'         // Other iPhone browser
	  ];
	  var pattern = new RegExp(useragents.join('|'), 'i');
	  return pattern.test(navigator.userAgent);
  }
  if (is_mobile()) {
    setTimeout(function() {
	    $('#header').slideUp();
	},2000);
		
  }
});

function loadPrice() {
  var region, country;
  price_map = {};
  for (region in REGION_MAP) {
    for(country in REGION_MAP[region].countries) {
      var url = 'http://webservice.recruit.co.jp/ab-road/tour/v1/?key=' + RECRUIT_API_KEY + '&order=1&count=1&area=EUR&country=' + country + '&format=jsonp&callback=?';
      (function(country, url) {
        $.getJSON(url, function(json, status) {
          price_map[country] = {
            'price': json.results.tour[0].price.min, // 価格
            'url': json.results.tour[0].urls.pc,
            'title': json.results.tour[0].title
          };
          var zoom = map.getZoom();
          if (zoom < 3) {
            showRegionPrice();
          } else {
            showCountryPrice();
          }
        });
      })(country, url);
    }
  }
}

// 地域ごとの価格を表示します。
// 価格をクリックすると、地域にズームします。
function showRegionPrice() {
  var region, country;
  map.entities.clear();
  for (region in REGION_MAP) {
    var min_price = 100000000;
    for(country in REGION_MAP[region].countries) {
      if (!price_map[country]) {
        continue;
      }
      if (price_map[country].price < min_price) {
        min_price = price_map[country].price;
      }
    }
    var latLongArray = REGION_MAP[region].center.split(',');
    var latVal = parseFloat(latLongArray[0]);
    var longVal = Microsoft.Maps.Location.normalizeLongitude(parseFloat(latLongArray[1]));
    var loc = new Microsoft.Maps.Location(latVal, longVal);
    var infobox = newPriceBox(loc, min_price);
    (function setClickEvent(loc) {
      Microsoft.Maps.Events.addHandler(infobox, 'click', function() {
        map.setView({zoom: 4, center: loc});
      });
    })(loc);
    map.entities.push(infobox);
  }
}

// 国ごとの価格を表示します。
// 価格をクリックすると詳細ページを表示します。
function showCountryPrice() {
  map.entities.clear();
  var region, country;
  for (region in REGION_MAP) {
    for(country in REGION_MAP[region].countries) {
      var latLongArray = REGION_MAP[region].countries[country].split(',');
      var latVal = parseFloat(latLongArray[0]);
      var longVal = Microsoft.Maps.Location.normalizeLongitude(parseFloat(latLongArray[1]));
      var loc = new Microsoft.Maps.Location(latVal, longVal);
      var url = 'http://webservice.recruit.co.jp/ab-road/tour/v1/?key=' + RECRUIT_API_KEY + '&order=1&count=1&area=EUR&country=' + country + '&format=jsonp&callback=?';

      var infobox = newPriceBox(loc, price_map[country].price);
      Microsoft.Maps.Events.addHandler(infobox, 'mouseenter', function() {
        this.target.setOptions({ zIndex: 1 });
      });
      Microsoft.Maps.Events.addHandler(infobox, 'mouseleave', function() {
        this.target.setOptions({ zIndex: 0 });
      });

      (function(info) {
        Microsoft.Maps.Events.addHandler(infobox, 'click', function() {
          if (window.confirm("詳細へ移動しますか？\n" + info.title + "\n\\" + addFigure(info.price))) {
            window.open(info.url, "detail");
          }
        });
      })(price_map[country]);

      map.entities.push(infobox);
    }
  }
}

function newPriceBox(loc, price) {
  var infoboxOptions = {
    title: addFigure(price), // 価格
    width: 90, height: 32,
    offset: new Microsoft.Maps.Point(-40,-15),
    showPointer: false,
    showCloseButton: false
  }; 
  return new Microsoft.Maps.Infobox(loc, infoboxOptions);
}

function addFigure(str) {
  var num = new String(str).replace(/,/g, "");
  while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
  return '&yen;' + num;
}

function listRegions() {
  var url = 'http://webservice.recruit.co.jp/ab-road/area/v1/?key=' + RECRUIT_API_KEY + '&format=jsonp&callback=?';
  $.getJSON(url, function(json, status) {
    var i, area;
    console.debug(json.results);
    for (i = 0; i < json.results.area.length; i++) {
      area = json.results.area[i];
      console.debug(area.code);
      listAreas(area.code);
    }
  });
}

function listAreas(area) {
  var url = 'http://webservice.recruit.co.jp/ab-road/country/v1/?key=' + RECRUIT_API_KEY + '&area=' + area + '&count=100&format=jsonp&callback=?';
  $.getJSON(url, function(json, status) {
    var i, country;
    console.debug('listAreas(' + area + ')');
    console.debug(json.results);
    for (i = 0; i < json.results.country.length; i++) {
      country = json.results.country[i];
      console.debug("'" + country.code + "':'', //" + country.name);
    }
  });
}

